package com.形为型模式.模板方法模式;

/**
 * 出国留学
 * 抽象类
 */
abstract class StudyAbroad{
    /**
     * 模板方法
     */
    void templateMethod(){
        lookingForSchool();
        applyForEnrol();
        applyForPassport();
        applyForVisa();
        readyGoAbouad();
        arriving();

    }

    /**
     * 找学校
     */
    abstract void lookingForSchool();

    /**
     * 入学申请
     */
    abstract void applyForEnrol();

    /**
     * 办理护照，出境卡，公证
     */
    void applyForPassport(){
        System.out.println("办理护照");
        System.out.println("办理出镜卡");
        System.out.println("办理公证");
    }
    /**
     * 申请签证
     */
    void applyForVisa(){
        System.out.println("申请签证");
    }

    /**
     * 体检 订机票  准备行装
     */
    void readyGoAbouad(){
        System.out.println("开始体验");
        System.out.println("开始订机票");
        System.out.println("准备行装");
    }

    /**
     * 抵达
     */
    abstract void arriving();
}
class StudyInAmerica extends StudyAbroad{
    @Override
    void lookingForSchool() {
        System.out.println("获取到哈弗大学资料");
    }

    @Override
    void applyForEnrol() {
        System.out.println("申请留学哈弗大学");
    }

    @Override
    void arriving() {
        System.out.println("抵达哈佛大学");
    }
}
/**
 * 模板方法模式
 * 出国留学
 */
public class Telplate {

    public static void main(String[] args) {
        StudyAbroad study = new StudyInAmerica();
        study.templateMethod();
    }
}
